package br.com.salao.ejb.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.apache.log4j.Logger;

import br.com.salao.ejb.dao.FuncionarioDao;
import br.com.salao.entity.Funcionario;

public class FuncionarioDaoImpl implements FuncionarioDao{

	private final GenericDao<Funcionario> dao;
	private EntityManager em;
	private Logger logger = Logger.getLogger(FuncionarioDaoImpl.class.getName());

	public FuncionarioDaoImpl(EntityManager em){
		this.em = em;
		dao = new GenericDao<Funcionario>(em,Funcionario.class);

	}

	public Funcionario inserir(Funcionario funcionario) {
		return dao.salvar(funcionario);
	}

	public Funcionario update(Funcionario funcionario) {		
		return dao.update(funcionario);
	}

	public List<Funcionario> lista() {
		return dao.lista();
	}


	@SuppressWarnings("unchecked")
	public List<Funcionario> buscarFuncionariosPorIdEstabelecimento(int idEstabelecimento){

		List<Funcionario> funcionarios = null;

		try {		
			Query query = em.createQuery("from Funcionario f where f.estabelecimento.id =:idEstabelecimento");
			query.setParameter("idEstabelecimento", idEstabelecimento);
			funcionarios = (List<Funcionario>) query.getResultList();	

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getCause());
			logger.error(sb.toString());			

			e.printStackTrace();
			funcionarios = null;

		} 
		return funcionarios;			
	}

	public Funcionario buscarFuncionariosPorId(int id){

		Funcionario funcionario = null;

		try {		
			Query query = em.createQuery("from Funcionario f where f.id = :id");
			query.setParameter("id", id);
			funcionario = (Funcionario) query.getSingleResult();	

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getCause());
			logger.error(sb.toString());

			e.printStackTrace();

			funcionario = null;

		} 
		return funcionario;			
	}	

}
